
define([
	'Util',  
    'text!tpl/requirement/editSubTask.tpl',
    'text!tpl/requirement/taskAss.tpl',
    'select',
    'comboSelect',
    'date',
    'form',
    'dialog',
    'jquery',
    'validator',
    'loading',
    '../common/getPath',
    'inputTag',
    'list',
    '../common/dateDiff',
    'cookie',
    'upload',
    '../requirement/fileList',
    '../common/dateFormat'
	],
	function (Util, tpl, taskAss, Select, ComboSelect, MyDate, Form, Dialog, $, Validator, Loading, AjaxPath, inputTag, List, dateDiff, $cookie, Upload, fileList) {
    require(['style!css/style.css']);    

    //系统变量-定义该模块的根节点
    var $el = null;
    var _indexModule = null,
        // list = null,
        // valiform = null,
        tabParent = null,
        editSubTaskData = null,
        loadingConfig=null,
        editSubTaskValidator = null,
        editSubTaskMomeValidor = null,
        editSubTaskPrioritySelect = null,
        editSubTaskStatusSelect = null,
        editSubTaskExcuterSelect = null,
        editSubTaskLinkSelect = null,
        editSubTaskTagSelect = null,
        editSubTaskAssSelect = null,
        editSubTaskStartDate = null,
        editSubTaskEndDate = null,
        editSubTaskTable = null,
        editSubTaskLogTable = null,
        editSubTaskLogUseType = null,
        delFlag = false,
        reqAttachmentIdList = [],
        tryPeopleData = null,
        editSubTaskAssSelectId = null,
        dialog = null,
        editSubTaskDatatplId = null,
        handLoading = null;
    //系统变量-构造函数
    var initialize = function(indexModule, options, tabItem) {
        reqAttachmentIdList = [];
        $el = $(tpl);
        _indexModule = indexModule;

        createLoading();
        editSubTaskData = options;
        editSubTaskDatatplId=options.menuId;
        // editSubTaskData = {"id":11,"ids":null,"requireTitle":"任务修改测试","requireType":"require","tryPeople":"1","sprintId":null,"healthStatus":null,"priStatus":"3","importStatus":null,"status":0,"parentId":4,"requireNum":null,"completionTime":null,"sprint":null,"sprintName":null,"parentRequirePojo":null,"likeEndTime":null,"likeMoreTime":null,"reallyUseTime":null,"issueId":null,"serialNumber":null,"updateTime":1505898326000,"splitStatus":null,"moduleIdList":null,"linkNumbers":null,"creater":null,"createTime":1505869447000,"describe":null,"starTime":null,"changeStatus":null,"presentDepartment":null,"presentPeople":null,"extend":null,"proposeTime":null,"activityIdList":null,"tagIdList":null,"projectId":null,"systemId":334,"systemName":null,"isdel":null,"type":3,"userName":null,"updater":null,"attachmentIdList":null,"statusName":"未开始","priStatusName":"高","tryPeopleName":"王健飞"};
        
        tabParent = tabItem;
        eventInit();
        this.content = $el;
        getEditTaskData();
    };

    //业务代码-事件初始化
    var eventInit = function() {
        $el.on('click', '.btnSave', saveEditTaskValidation);
        $el.on('click', '.btnBack', back);

        $el.on('click', '.editSubTaskNextStatus a', bindEditTaskNextStatus);

        $el.on('click', '.addSubTaskBtn', addSubTask);        
        $el.on('click', '.viewSubTaskBtn', viewSubTask);        
        $el.on('click', '.taskAss', createSubTaskAssDialog);        
        $el.on('click', '.t-list-title .tri', bindTableSwitch);    
        $el.on('click', '.editSubTaskAddMome', createSubTaskMomeDialog);

        $el.on('click', '.editSubTaskTableAssBtn', createSubTaskAssDialog);
        $el.on('click', '.editSubTaskTableEditBtn', editSubTask);

        $el.on('click', '.editSubTaskLogTab li', bindEditSubtaskLogTab);
    };

    var back = function() {
        tabParent.switchTab(editSubTaskData.menuId);
        tabParent.destroy("editSubTaskTab");
    }

    var switchTab = function(index) {
        $(".t-tabs-items li", $el).eq(index).trigger('click');
    }

    var formInit = function() {
        $("input[name='requireTitle']", $el).val(editSubTaskData.taskTitle);
        $(".sprintNameText", $el).html(editSubTaskData.sprintName);
        $("input[name='sprintName']", $el).val(editSubTaskData.sprintName);
        $("input[name='sprintId']", $el).val(editSubTaskData.sprintId);

        $("input[name='likeEndTime']", $el).val(editSubTaskData.likeEndTime);
        $("input[name='likeMoreTime']", $el).val(editSubTaskData.likeMoreTime);
        $("input[name='reallyUseTime']", $el).val(editSubTaskData.reallyUseTime);
        $("textarea[name='describe']", $el).val(editSubTaskData.describe);
    }

    var addSubTask = function(){
        tabParent.destroy("editSubTaskTab");

        tabParent.createTab({
            title: '新建子工作项',
            closeable: 1, //是否可以关闭 0false不可以|1true可以
            className: 'addSubTaskTab'
        });
        tabParent.switchTab('新建子工作项');
        editSubTaskData.menuId = editSubTaskDatatplId;
        require(['js/requirement/addSubTask'], function(addSubTaskContent) {
            var result = new addSubTaskContent({}, editSubTaskData, tabParent);
            tabParent.content(result.content);
        });
    }

    var editSubTask = function(){
        tabParent.destroy("editSubTaskTab");

        tabParent.createTab({
            title: '修改子工作项',
            closeable: 1, //是否可以关闭 0false不可以|1true可以
            className: 'editSubTaskTab'
        });
        tabParent.switchTab('修改子工作项');
        var editSubTaskData = editSubTaskTable.getSelected();
        console.log(editSubTaskData);
        editSubTaskData.menuId = editSubTaskDatatplId;
        require(['js/requirement/editSubTask'], function(editSubTaskContent) {
            var result = new editSubTaskContent({}, editSubTaskData, tabParent);
            tabParent.content(result.content);
        });
    }

    // 查看工作项或任务
    var viewSubTask = function(e, data){
        tabParent.destroy("editSubTaskTab");

        var editSubTaskData = data.data;
        editSubTaskData.menuId = editSubTaskDatatplId;

        tabParent.createTab({
            title: (editSubTaskData.type===1 ? '查看工作项' : editSubTaskData.type===2 ? '查看子工作项' : ''),
            closeable: 1, //是否可以关闭 0false不可以|1true可以
            className: (editSubTaskData.type===1 ? 'viewRequirementTab' : editSubTaskData.type===2 ? 'viewSubTaskTab' : '')
        });
        tabParent.switchTab(editSubTaskData.type===1 ? '查看工作项' : editSubTaskData.type===2 ? '查看子工作项' : '');

        if(editSubTaskData.type===1){
            require(['js/requirement/viewRequirement'], function(viewSubTaskContent) {
                var result = new viewSubTaskContent({}, editSubTaskData, tabParent);
                tabParent.content(result.content);
            });
        }else if(editSubTaskData.type===2){
            require(['js/requirement/viewSubTask'], function(viewSubTaskContent) {
                var result = new viewSubTaskContent({}, editSubTaskData, tabParent);
                tabParent.content(result.content);
            });
        }
        
    }

    var getEditTaskNextStatus = function(statusId){
        Util.ajax.getJson(AjaxPath.project + '/workFlows/getFLowActions?modual=require&type=requireStatus&flowFrom=' + statusId + "&systemId=" + editSubTaskData.systemId , {}, function(result, isok){
            if(result.returnCode==='0000'){
                var str = "";
                $(result.beans).each(function(index, item){
                    str += '<a href="javascript:;" class="t-btn t-btn-white" data="'+ item.toValue +'">'+ item.description +'</a>';
                })

                $(".editSubTaskNextStatus", $el).html(str);
            }
        })
    }

    var bindEditTaskNextStatus = function(){
        var config = null;
        var data = {};
            data.id = editSubTaskData.id;
            data.updater = $cookie.get("userId");
            data.type = 2;
            // data.updater = 1;
            data.status = $(this).attr("data");
        Util.ajax.postJson(AjaxPath.demand + '/requires/status', JSON.stringify(data), function(result, isok){
            if (result.returnCode==="0000") {
                config = {
                    mode: 'confirm', // 对话框模式，默认normal标准|confirm浮动层|confirm确认对话框
                    title:'提示',
                    width: 300, //对话框宽度，可选项。normal默认值为600，confirm默认值为300，tips默认值为240
                    height: 120, //对话框高度，可选项。normal默认值为400，confirm默认值为180，tips默认值为80
                    cancelDisplay: false, //是否显示取消按钮（强制执行，可在confirm模式下生效），可选项。 默认true(显示)
                    modal:true,
                    content: '<div style="text-align:center;margin-top:50px">修改状态成功</div>' ,// 对话框内容，可以是字符串、html片段、或dom对象,默认为loading状态（点组成的圈）
                };
                dialog = new Dialog(config);
                dialog.on('onclose',function(){
                    getEditTaskNextStatus(result.beans.status);
                    editSubTaskStatusSelect.setValue('"' + result.beans.status + '"');
                });
                
            }else{
                config = {
                    mode: 'confirm', // 对话框模式，默认normal标准|confirm浮动层|confirm确认对话框
                    title:'提示',
                    width: 300, //对话框宽度，可选项。normal默认值为600，confirm默认值为300，tips默认值为240
                    height: 120, //对话框高度，可选项。normal默认值为400，confirm默认值为180，tips默认值为80
                    cancelDisplay: false, //是否显示取消按钮（强制执行，可在confirm模式下生效），可选项。 默认true(显示)
                    modal:true,
                    content: '<div style="text-align:center;margin-top:50px">'+result.returnMessage+'</div>' ,// 对话框内容，可以是字符串、html片段、或dom对象,默认为loading状态（点组成的圈）
                };
                dialog = new Dialog(config);
            }
        },'application/json')
    }

    var inSelect = function() {
        Util.ajax.getJson( AjaxPath.project + "/dropdown?modual=require&type=priStatus", {}, function(result, isok){
            editSubTaskPrioritySelect = new Select({
                el:$("#editSubTaskPriority", $el),       //要绑定的容器
                ajax:{    //所有jquery.ajax的配置项均可配置，这些配置将替换底层组件的配置，<span class="s">慎用</span>
                    method:'GET'
                }, 
                label:'<i style="color:red;padding:2px;">*</i>优先级:', //下拉框单元左侧label文本，可不配置
                selectText:false,       //是否显示  ‘选择|清除’  模式
                name:'priStatus',    //下拉框单元右侧下拉框名称
                disabled:false,     //组件是否被禁用
                topOption:"请选择", //设置最顶部option的text属性
                value:'',//初始选中项设置 默认是按value，如果你想按id设置 也可以 value:[&quot;id&quot;,1],这样设置
                textField:"value",   //设置下拉框内容，填写数据中对应的字段名
                valueField:"key",//设置下拉框value，填写数据中对应的字段名
                datas: result.beans,         //数据源
                loadAtClick:false,// true--第一次点击时渲染|false或不配置--初始化时渲染
                dataReady:function(){
                    console.log("获取优先级");
                } //select的DOM结构加载完后执行
                //  url:'../data/select.json'  //数据源，不建议使用，后期将会移除
            });
            $("#editSubTaskPriority .sn-select-container").addClass("mt-5");
            editSubTaskPrioritySelect.setValue('"' + editSubTaskData.priStatusId + '"');
        })  

        Util.ajax.getJson( AjaxPath.project + '/dropdown?modual=require&type=requireStatus&flowSwitch=true&systemId='+ editSubTaskData.systemId +'&flowFrom=' + editSubTaskData.status, {}, function(result, isok){
            editSubTaskStatusSelect = new Select({
                el:$("#editSubTaskStatus", $el),       //要绑定的容器
                ajax:{    //所有jquery.ajax的配置项均可配置，这些配置将替换底层组件的配置，<span class="s">慎用</span>
                    method:'GET'
                }, 
                label:'<i style="color:red;padding:2px;">*</i>状态:', //下拉框单元左侧label文本，可不配置
                selectText:false,       //是否显示  ‘选择|清除’  模式
                name:'status',    //下拉框单元右侧下拉框名称
                disabled:false,     //组件是否被禁用
                topOption:"请选择", //设置最顶部option的text属性
                value:'',//初始选中项设置 默认是按value，如果你想按id设置 也可以 value:[&quot;id&quot;,1],这样设置
                textField:"value",   //设置下拉框内容，填写数据中对应的字段名
                valueField:"key",//设置下拉框value，填写数据中对应的字段名
                datas: result.beans,         //数据源
                loadAtClick:false,// true--第一次点击时渲染|false或不配置--初始化时渲染
                dataReady:function(){
                    console.log("获取状态");
                } //select的DOM结构加载完后执行
                //  url:'../data/select.json'  //数据源，不建议使用，后期将会移除
            });
            editSubTaskStatusSelect.setValue('"' + editSubTaskData.status + '"');
            $("#editSubTaskStatus .sn-select-container").addClass("mt-5");
        })

        Util.ajax.getJson(AjaxPath.project +'/dropdown?modual=project&type=userId&systemId='+ editSubTaskData.systemId, {}, function(result, isok){
            tryPeopleData = result.beans;  
            if(result.returnCode === "0000"){
                result.returnCode = "0";
                for(var i =0;i<result.beans.length;i++){
                    result.beans[i].name =  result.beans[i].value;
                    result.beans[i].value = result.beans[i].key;
                }
                result.beans.unshift({
                    "id":"0",
                    "name":"请选择",
                    "value":""
                })
                result.beans = JSON.parse(JSON.stringify(result.beans));
            }  
            editSubTaskExcuterSelect = new ComboSelect({
                el:$("#editSubTaskExcuter", $el),       //要绑定的容器
                ajax:{    
                    method:'GET'
                }, 
                // label:'<i style="color:red;padding:2px;">*</i>经办人:', //下拉框单元左侧label文本，可不配置
                checked:'0',     
                selectText:false,      
                name:'tryPeople',   
                disabled:false,     
                // topOption:"", 
                // value:0,
                // textField:"value",   //设置下拉框内容，填写数据中对应的字段名
                // valueField:"key",//设置下拉框value，填写数据中对应的字段名
                datas: result.beans,         //数据源
                loadAtClick:false,// true--第一次点击时渲染|false或不配置--初始化时渲染
            });
            editSubTaskExcuterSelect.setValue( editSubTaskData.tryPeople );
            $("#editSubTaskExcuter .sn-select-container").addClass("mt-5");
            $("#editSubTaskExcuter .combo-select select option").removeAttr("selected");
            $("#editSubTaskExcuter .combo-select select option:first").attr("selected","selected").attr("disabled","");
            $("#editSubTaskExcuter input[name='comboInput']").attr("placeholder", "请选择");
        })  

        Util.ajax.getJson( AjaxPath.project + '/dropdown?modual=require&type=linkInfo&systemId='+ editSubTaskData.systemId+"&notRefId="+editSubTaskData.id, {}, function(result, isok){
            editSubTaskLinkSelect = new inputTag({
                el:$('#editSubTaskLink', $el),        //必填 要绑定的容器
                name:'defectIdList',
                datas: result.beans, //必填 数据源
                textField: 'value',        //设置下拉框内容，填写数据中对应的字段名
                valueField: 'key',
                placeholder:'请输入要链接的工作项',
                addTag: false,             //必填  是否可以添加新标签
            });
            editSubTaskLinkSelect.checkSelectTag(editSubTaskData.linkInfos);
        })

        Util.ajax.getJson( AjaxPath.project + "/dropdown?modual=require&type=tag", {}, function(result, isok){
            editSubTaskTagSelect = new inputTag({
                el:$('#editSubTaskTag', $el),       //必填 要绑定的容器
                name:'tagIdList',
                datas: result.beans,           //必填 数据源
                textField: 'value',        //设置下拉框内容，填写数据中对应的字段名  
                valueField: 'key',      
                placeholder:'请输入标签',
                addTag: true,             //必填  是否可以添加新标签
                maxlength:'20',
            });
            editSubTaskTagSelect.checkSelectTag(editSubTaskData.tagList, 'id');
        }) 
    }

    var initDate = function() {
        editSubTaskStartDate = new MyDate({
            el: $("#editSubTaskStartTime", $el),
            inputClassName: 'date',
            label: '<i style="color:red;padding:2px;">*</i>计划开始时间:',
            name: 'starTime',    //开始日期文本框name
            isReadOnly: true,  //项可设置日期输入框是否只读
            min: -30,         //最小日期限制
            max: editSubTaskData.completionTime,
            range: false,
            type: "date",
            isDisabled: false,//是否禁用组件
            // defaultValue: nowTime(0,'yyyy-MM-dd'),
            defaultValue: editSubTaskData.starTime,
            inputPlaceholder:"请选择",
            btns: ['now', 'confirm'], //'clear', 
            done: function(dates,value){
                editSubTaskEndDate.options.min = dates; //设置结束日期的最小限制
                likeEndTime(dates, $("input[name=completionTime]", $el).val());
                likeMoreTime(dates, $("input[name=completionTime]", $el).val())
            }
        });
        editSubTaskEndDate = new MyDate({
            el: $("#editSubTaskEndTime", $el),
            inputClassName: 'date',
            label: '<i style="color:red;padding:2px;">*</i>计划完成时间:',
            name: 'completionTime',    //开始日期文本框name
            isReadOnly: true,  //项可设置日期输入框是否只读
            min: editSubTaskData.starTime,         //最小日期限制
            range: false,
            type: "date",
            isDisabled: false,//是否禁用组件
            inputPlaceholder:"请选择",
            // defaultValue: nowTime(365,'yyyy-MM-dd'),
            defaultValue: editSubTaskData.completionTime,
            btns: ['now', 'confirm'], //'clear', 
            done: function(dates,value){
                editSubTaskStartDate.options.max = dates; //设置开始日期的最大日期
                likeEndTime($("input[name=starTime]", $el).val(), dates);
                likeMoreTime($("input[name=starTime]", $el).val(), dates);
            }
        });
    }

    //计算预估工时
    var likeEndTime = function(startDate, endDate){
        if(startDate!=="" && endDate !==""){
            var date = dateDiff(startDate, endDate);
            $("input[name=likeMoreTime]", $el).val(date * 8);
        }
        
    }

    //计算预估剩余工时
    var likeMoreTime = function(startDate, endDate){
        if(startDate!=="" && endDate !==""){
            var startDateTime = "";
            var startDateTamp = startDate.replace(/-/g, "");
            var todayDateTamp = new Date().Format('yyyy-MM-dd').replace(/-/g, "");

            if(parseInt(startDateTamp) > parseInt(todayDateTamp)){
                startDateTime = startDate;
            }else{
                startDateTime = new Date().Format('yyyy-MM-dd');
            }

            var date = dateDiff(startDateTime, endDate);
            $("input[name=likeEndTime]", $el).val(date > 0 ? date * 8 : 0);
        }
    }

    //附件
    var fileUp = function () {
        var uploadConfig = {
            el: $("#editSubTaskAnnexTable", $el), //组件绑定的容器
            className: 'upload', //组件外围的className
            url:  AjaxPath.project + '/uploadFile/upload', //组件上传的后台接口
            // deleteUrl: 'data/upload.json?name=[name]', //组件上传的后台接口
            paramName:'textFile',
        };
        var filesUpload = new Upload(uploadConfig);


        filesUpload.on('submit',function(e,data){
            //formData的数据会和二进制数据一起提交到服务端
            data.formData = { creator:$cookie.get("userId"), businessType:'require', type:2 };
        });
 
        filesUpload.on('done',function(e,data){
            reqAttachmentIdList.push(data.result.files[0].attId);
        });
        filesUpload.on('remove',function(e,data){
            if(data.attId){
                delFlag=true;
                data=data.attId;
            };
            uploadDelete(e,data)
            //e新增自定义remove方法，可根据服务端文件处理结果删除文件列表中的当前行
        })

        filesUpload.on('download',function(e,data){
            console.log(data)
            if(data.attId){
                delFlag=true;
                data=data.attId;
                uploadDown(e,data);
            };

            //e新增自定义remove方法，可根据服务端文件处理结果删除文件列表中的当前行
        });
    };

    function uploadDelete(e,data){
        //e新增自定义remove方法，可根据服务端文件处理结果删除文件列表中的当前行
        if(delFlag){
            new Dialog({
                title: '提示', //弹窗标题，
                content: '<div style="text-align:center;margin-top:50px">确定要删除该附件吗？</div>', //弹窗内容，可以是字符串、html代码段,tpl对象。默认为loading状态（由点组成的圈。大段代码建议使用 tpl。
                okValue: '确&nbsp;&nbsp;定', //确定按钮的文本 默认是 ‘ok’
                ok: function() {
                    /*Util.ajax.getJson(AjaxPath.project + '/attachment/delete/'+data, {updater:$cookie.get("userId")}, function(result, isok){
                        if(result.returnCode==='0000'){*/
                            reqAttachmentIdList = $.grep(reqAttachmentIdList,function(i,n){
                                return i != data;
                            });
                            console.log(reqAttachmentIdList);
                            e.remove();
                        /*}else{
                            new Dialog({
                                mode: 'tips',
                                delayRmove:3, //延迟删除秒数设定 tips默认3秒,非tips默认不关闭。
                                tipsType:'tips', //tips类型；可选 success | error，默认普通tips。
                                maxWidth:'226px', //设置tips对话框的最大宽度,默认为226px。仅在tips对话框下生效，该项存在时，width属性将失效。
                                content: '删除附件失败！'
                            });
                        }*/
                        return true;
                    /*});*/
                },
                cancel: function() {},
                cancelValue: '取&nbsp;&nbsp;消', //取消按钮的文本 默认是 ‘关闭’
                width: 300,
                height: 120,
                modal:true,
            });
        }else{
            e.remove();
        }
    }

    function uploadDown(e,data){
        //e新增自定义remove方法，可根据服务端文件处理结果删除文件列表中的当前行
        if(delFlag){
            window.location.href=AjaxPath.project+'/uploadFile/download?id='+data;
        }
    }

    //filelist==del
    var fileTable = function(){
        Util.ajax.getJson(AjaxPath.project + '/attachment?businessId='+ editSubTaskData.id +'&businessType=require', {}, function(result, isok){
            if(result.returnCode==="0000"){
                $(result.beans).each(function(index, item){
                    reqAttachmentIdList.push(item.id);
                })   

                $('#editSubTaskAnnexTable .files', $el).prepend(fileList(result.beans));

                $('#editSubTaskAnnexTable .uploadDelete',$el).click(function(){
                    delFlag=true;
                    var delNode=$(this).parent().parent().parent('.template-upload');
                    uploadDelete(delNode,$(this).attr('data'))
                });
            }
            
        });
    };

    var initList = function(){
        editSubTaskTable = new List({
            el: $('.editSubTaskTable', $el),
            ajax: {    //所有jquery.ajax的配置项均可配置，这些配置将替换底层组件的配置；慎用
                method:'GET'
            },
            field: {
                boxType: 'radio',
                key: 'id',
                items: [
                {
                    text: '子工作项名称',
                    name: 'requireTitle',
                    className: 'w90',
                    // sorting:1,
                    width:200,
                    click: function (e, val,item) {
                        // console.log(e,item)
                        // creatDialog(e, item);
                        viewSubTask(e, item);
                    },
                    render: function (item, val) {
                        val = $('<span/>').text( val ).html(); 
                        return '<a href="javascript:;" class="text-overflow" style="line-height:36px;display:block;outline:none">' + val + '</a>';
                    }
                },
                {
                    text: '状态',
                    name: 'statusName',
                    className: 'w90',
                    // sorting:1,
                    // width:150,
                    render: function (item, val) {
                        return val;
                    }
                },
                {
                    text: '优先级',
                    name: 'priStatusName',
                    className: 'w90',
                    // sorting:1,
                    // width:150,
                    render: function (item, val) {
                        return val;
                    }
                },
                {
                    text: '经办人',
                    name: 'tryPeopleName',
                    className: 'w90',
                    // sorting:1,
                    // width:150,
                    render: function (item, val) {
                        return val;
                    }
                },
                {
                    text: '创建时间',
                    name: 'createTime',
                    className: 'w90',
                    // sorting:1,
                    // width:150,
                    render: function (item, val) {
                        return new Date(val).Format("yyyy-MM-dd hh:mm:ss");
                    }
                },
                {
                    text: '更新时间',
                    name: 'updateTime',
                    className: 'w90',
                    // sorting:1,
                    // width:150,
                    render: function (item, val) {
                        return new Date(val).Format("yyyy-MM-dd hh:mm:ss");
                    }
                },
                {
                    text: '操作',
                    name: '',
                    className: 'w90',
                    // sorting:1,
                    // width:150,
                    render: function (item, val) {
                        return '<div class="fn-center"><button class="t-btn t-btn-blue t-btn-xs editSubTaskTableAssBtn" style="margin-right:8px;"><a style="color:#fff">分配</a></button><button class="t-btn t-btn-blue t-btn-xs editSubTaskTableEditBtn"><a style="color:#fff">修改</a></button></div>';
                    }
                }]
            },
            page: {
                customPages: [2, 3, 5, 10, 15, 20, 30, 50], //可选择每页显示多少条
                perPage: 5, //默认每页显示多少条记录
                total: true
            },
            data: {
                url: AjaxPath.demand + '/requires/tasks/' + editSubTaskData.id
            }
        })
        editSubTaskTable.search();


        editSubTaskLogTable = new List({
            el: $('.editSubTaskLogTable', $el),
            ajax: {    //所有jquery.ajax的配置项均可配置，这些配置将替换底层组件的配置；慎用
                method:'GET'
            },
            field: {
                boxType: 'radio',
                key: 'id',
                items: [
                {
                    text: '操作人',
                    name: 'createrName',
                    className: 'w90',
                    // sorting:1,
                    width:100,
                    click: function (e, val,item) {
                        // console.log(e,item)
                        // creatDialog(e, item);
                    },
                    render: function (item, val) {
                        return val;
                    }
                },
                {
                    text: '记录',
                    name: 'content',
                    className: 'w90 text-break',
                    // sorting:1,
                    width:400,
                    render: function (item, val) {
                        // console.log(item);
                        var str = "";
                            str += '<p class="fn-left">于&nbsp;&nbsp;' + new Date(item.createTime).Format('yyyy-MM-dd hh:mm:ss') + '&nbsp;&nbsp;' + item.typeName + '了&nbsp;&nbsp;' + item.businessType + '：' + '<a href="javascript:;" data="'+ item.businessId +'" class="viewSubTaskBtn">'+ item.businessTitle +'</a>' + item.content +'</p>';
                        return str;
                    }
                }]
            },
            page: {
                customPages: [2, 3, 5, 10, 15, 20, 30, 50], //可选择每页显示多少条
                perPage: 5, //默认每页显示多少条记录
                total: true
            },
            data: {
                url: AjaxPath.project + '/logInfo/query?businessId='+ editSubTaskData.id +'&businessType=task'
            }
        })
        editSubTaskLogTable.search();
        editSubTaskLogTable.on('success',function(result){
            $(".editSubTaskLogTable" ,$el).find(".sn-list-header").hide();
        });
    }

    var bindEditSubtaskLogTab = function(){
        var data={};
        $(this).addClass('actived').siblings().removeClass('actived');
        data.type = $(this).attr("data");
        editSubTaskLogTable.search(data);
    }

    var bindTableSwitch = function(e){
        $(this).toggleClass('tri-left');
        $(this).parent('.t-list-title').siblings().stop().slideToggle();
    }

    var subTaskAssSelect = function(id){
        editSubTaskAssSelect = new Select({
            el:$("#editSubTaskAss"),       //要绑定的容器
            ajax:{    //所有jquery.ajax的配置项均可配置，这些配置将替换底层组件的配置，<span class="s">慎用</span>
                method:'GET'
            }, 
            label:'<i style="color:red;padding:2px;">*</i>分配给:', //下拉框单元左侧label文本，可不配置
            selectText:false,       //是否显示  ‘选择|清除’  模式
            name:'tryPeople',    //下拉框单元右侧下拉框名称
            disabled:false,     //组件是否被禁用
            topOption:"", //设置最顶部option的text属性
            value:0,//初始选中项设置 默认是按value，如果你想按id设置 也可以 value:[&quot;id&quot;,1],这样设置
            textField:"value",   //设置下拉框内容，填写数据中对应的字段名
            valueField:"key",//设置下拉框value，填写数据中对应的字段名
            datas: tryPeopleData,         //数据源
            loadAtClick:false,// true--第一次点击时渲染|false或不配置--初始化时渲染
            dataReady:function(){
                console.log("获取经办人");
            } //select的DOM结构加载完后执行
            //  url:'../data/select.json'  //数据源，不建议使用，后期将会移除
        });
        editSubTaskAssSelect.setValue('"' + id + '"'); //editSubTaskData.tryPeople
    }

    var createSubTaskAssDialog = function(e){
        var subTaskData = {};
        var who = null;
        if(e.target.className.indexOf("taskAss")>-1){
            subTaskData = editSubTaskData;
            who = true;
        }else{
            subTaskData = editSubTaskTable.getSelected();
            editSubTaskAssSelectId = subTaskData.tryPeople;
            who = false;
        }

        var data = {};
            data.formClassName = "detailEditSubTaskAssForm";
            data.selectName = "editSubTaskAss";
        var config = {
            mode: 'confirm', //对话框模式，默认normal标准|tips浮动层|confirm确认对话框
            title: '任务分配', //对话框标题，
            content: Util.hdb.compile(taskAss)(data), //对话框内容，可以是字符串、html代码段,tpl对象。默认为loading状态（由点组成的圈。大段代码建议使用 tpl。
            ok: function() { 
                console.log('点击了确定按钮');
                createSubTaskAss(subTaskData, who);
                return true;
            }, 
            cancel: function() {
                return true;
            },
            cancelValue: '取消', //取消按钮的文本 默认是 ‘关闭’
            okValue: '确定', //取消按钮的文本 默认是 ‘关闭’
            cancelDisplay: true, //是否显示取消按钮 默认true显示|false不显示
            width: 600, //对话框宽度，normal默认值为600，confirm默认值为300，tips默认值为240
            height: 300, //对话框高度，normal默认值为400，confirm默认值为180，tips默认值为80
            maxWidth: 240,//设置tips对话框的最大宽度,默认为240px。仅在tips对话框下生效，该项存在时，width属性将失效。
            maxHeight: 'auto', //设置tips对话框的最大高度,默认为auto。仅在tips对话框下生效，该项存在时，height属性将失效。
            padding:'0 16px 1em 10px',//(默认值: 继承 css 文件设置) 设置消息内容与消息容器的填充边距，即 style padding属性
            align: 'bottom left',//设置对话框与其他元素的对齐方式。仅在show(elem)与showModal(elem)传入元素时生效。默认值: "bottom left"。可选："top left" "top" "top right" "right top" "right" "right bottom" "bottom right" "bottom" "bottom left" "left bottom" "left" "left top"。
            skin: 'dialogSkin dialogSkin2',//设置对话框额外的className参数,多个className请使用空格隔开。
            fixed: false, //是否开启固定定位 默认false不开启|true开启
            quickClose: false, //点击空白处快速关闭 默认false不关闭|true关闭
            modal: true ,//是否开启模态框状态  默认false不开启|true开启,confirm默认状态为true
            backdropBackground:'#000',//设置遮罩颜色，默认 #000。
            backdropOpacity:0.7, //设置遮罩透明度，默认 0.7，取值范围：0~1 。
            beforeOpen: function() {
                console.log('对话框打开时执行。');
                subTaskAssSelect(editSubTaskAssSelectId);                   
            }, //对话框打开之前执行。
            escClose:true,//esc键快速关闭对话框，默认为true
            zIndex:990   // 对话框的z-index值，默认是1024。
        };
        dialog = new Dialog(config);
    }

    var createSubTaskAss = function(datas, who){
        var config = null;
        var data = Form.serialize($('.detailEditSubTaskAssForm'));
            data.updater = $cookie.get("userId");
            data.type = 2;
            // data.updater = 1;

        Util.ajax.postJson(AjaxPath.demand + '/requires/allot/'+ datas.id, data, function(result, isok) {
            if(result.returnCode==="0000") {
                config = {
                    mode: 'confirm', // 对话框模式，默认normal标准|confirm浮动层|confirm确认对话框
                    title:'提示',
                    width: 300, //对话框宽度，可选项。normal默认值为600，confirm默认值为300，tips默认值为240
                    height: 120, //对话框高度，可选项。normal默认值为400，confirm默认值为180，tips默认值为80
                    cancelDisplay: false, //是否显示取消按钮（强制执行，可在confirm模式下生效），可选项。 默认true(显示)
                    modal:true,
                    content: '<div style="text-align:center;margin-top:50px">分配成功</div>' ,// 对话框内容，可以是字符串、html片段、或dom对象,默认为loading状态（点组成的圈）
                };
                dialog = new Dialog(config);
                if(who){
                    editSubTaskAssSelectId = result.beans.userId;
                    editSubTaskExcuterSelect.setValue('"' + result.beans.userId + '"');
                    editSubTaskAssSelect.setValue('"' + result.beans.userId + '"');
                }else{
                    editSubTaskTable.search({},editSubTaskTable.pageIndex);
                }
                // dialog.on('onclose',function(){
                //     back();
                // });
            } else {
                config = {
                    mode: 'confirm', // 对话框模式，默认normal标准|confirm浮动层|confirm确认对话框
                    title:'提示',
                    width: 300, //对话框宽度，可选项。normal默认值为600，confirm默认值为300，tips默认值为240
                    height: 120, //对话框高度，可选项。normal默认值为400，confirm默认值为180，tips默认值为80
                    cancelDisplay: false, //是否显示取消按钮（强制执行，可在confirm模式下生效），可选项。 默认true(显示)
                    modal:true,
                    content: '<div style="text-align:center;margin-top:50px">'+result.returnMessage+'</div>' ,// 对话框内容，可以是字符串、html片段、或dom对象,默认为loading状态（点组成的圈）
                };
                dialog = new Dialog(config);
            }
        });
    }

    var createSubTaskMomeDialog = function(){
        require(['text!tpl/requirement/addMemo.tpl'], function(addMomo){
            var data = {};
                data.formClassName = "detailEditSubTaskMemoForm";
                data.textareaName = "content";
            var config = {
                mode: 'confirm', //对话框模式，默认normal标准|tips浮动层|confirm确认对话框
                title: '添加备注', //对话框标题，
                content: Util.hdb.compile(addMomo)(data), //对话框内容，可以是字符串、html代码段,tpl对象。默认为loading状态（由点组成的圈。大段代码建议使用 tpl。
                ok: function() { 
                    console.log('点击了确定按钮');
                    if(editSubTaskMomeValidor.form()) {
                        createSubTaskMome();
                    } else {
                        console.log('验证失败');
                    }
                    return false;
                }, 
                cancel: function() {
                    return true;
                },
                cancelValue: '取消', //取消按钮的文本 默认是 ‘关闭’
                okValue: '确定', //取消按钮的文本 默认是 ‘关闭’
                cancelDisplay: true, //是否显示取消按钮 默认true显示|false不显示
                width: 600, //对话框宽度，normal默认值为600，confirm默认值为300，tips默认值为240
                height: 140, //对话框高度，normal默认值为400，confirm默认值为180，tips默认值为80
                maxWidth: 240,//设置tips对话框的最大宽度,默认为240px。仅在tips对话框下生效，该项存在时，width属性将失效。
                maxHeight: 'auto', //设置tips对话框的最大高度,默认为auto。仅在tips对话框下生效，该项存在时，height属性将失效。
                padding:'0 16px 1em 10px',//(默认值: 继承 css 文件设置) 设置消息内容与消息容器的填充边距，即 style padding属性
                align: 'bottom left',//设置对话框与其他元素的对齐方式。仅在show(elem)与showModal(elem)传入元素时生效。默认值: "bottom left"。可选："top left" "top" "top right" "right top" "right" "right bottom" "bottom right" "bottom" "bottom left" "left bottom" "left" "left top"。
                skin: 'dialogSkin dialogSkin2',//设置对话框额外的className参数,多个className请使用空格隔开。
                fixed: false, //是否开启固定定位 默认false不开启|true开启
                quickClose: false, //点击空白处快速关闭 默认false不关闭|true关闭
                modal: true ,//是否开启模态框状态  默认false不开启|true开启,confirm默认状态为true
                backdropBackground:'#000',//设置遮罩颜色，默认 #000。
                backdropOpacity:0.7, //设置遮罩透明度，默认 0.7，取值范围：0~1 。
                beforeOpen: function() {
                    console.log('对话框打开时执行。');
                    subTaskAssSelect();                   
                }, //对话框打开之前执行。
                escClose:true,//esc键快速关闭对话框，默认为true
                zIndex:990   // 对话框的z-index值，默认是1024。
            };
            dialog = new Dialog(config);
            createSubTaskMomeValidation();
        })
    }

    var createSubTaskMomeValidation = function() {
        var config = {
            // el: $('.validatorForm'),
            el: $(".detailEditSubTaskMemoForm"),
            // submitBtn: $(".btnSave"), //触发验证的按钮，可不配置
            dialog: true, //是否弹出验证结果对话框
            rules: {
                content: "required"
            },
            messages: {
                content: {
                    required: "备注不能为空！"
                }
            }    
        };  
        editSubTaskMomeValidor = new Validator(config);
    }

    var createSubTaskMome = function(){
        var config = null;
        var data = Form.serialize($('.detailEditSubTaskMemoForm'));
            data.businessId = editSubTaskData.id;
            data.businessType = 'require';
            data.businessTitle = editSubTaskData.taskTitle;
            data.creater = $cookie.get('userId');
            // data.creater = 1;
        Util.ajax.postJson(AjaxPath.project + '/logInfo/insert?', JSON.stringify(data), function(result, isok){
            if(result.returnCode==="0000"){
                dialog.remove();
                editSubTaskLogTable.search();
                $('.editReqTaskLogTab li').eq(0).addClass('actived').siblings().removeClass('actived');
            }else {
                config = {
                    mode: 'confirm', // 对话框模式，默认normal标准|confirm浮动层|confirm确认对话框
                    title:'提示',
                    width: 300, //对话框宽度，可选项。normal默认值为600，confirm默认值为300，tips默认值为240
                    height: 120, //对话框高度，可选项。normal默认值为400，confirm默认值为180，tips默认值为80
                    cancelDisplay: false, //是否显示取消按钮（强制执行，可在confirm模式下生效），可选项。 默认true(显示)
                    modal:true,
                    content: '<div style="text-align:center;margin-top:50px">'+result.returnMessage+'</div>' ,// 对话框内容，可以是字符串、html片段、或dom对象,默认为loading状态（点组成的圈）
                };
                dialog = new Dialog(config);
            }
        }, 'application/json')
    }

    var editSubTaskValidation = function() {
        var config = {
            // el: $('.validatorForm'),
            el: $(".detailEditSubTaskForm", $el),
            submitBtn: $(".btnSave"), //触发验证的按钮，可不配置
            dialog: true, //是否弹出验证结果对话框
            pattern: { numberThree: "^(\\d+\\.\\d{1,1}|\\d+)$" },
            rules: {
                requireTitle: "required",
                priStatus: "required",
                status: 'required',
                tryPeople: 'required',
                starTime: 'required|date',
                completionTime: "required|date",
                likeEndTime: "required|numberThree",
                likeMoreTime: "required|numberThree",
                reallyUseTime: "number|numberThree"
            },
            messages: {
                requireTitle: {
                    required: "子工作项名称不能为空！"
                },
                priStatus: {
                    required: "优先级不能为空！"
                },
                status: {
                    required: "状态不能为空！"
                },
                tryPeople: {
                    required: "经办人不能为空！"
                },
                starTime: {
                    required: "计划开始时间不能为空！"
                },
                completionTime: {
                    required: "计划完成时间不能为空！"
                },
                likeEndTime: {
                    required: "预估工时不能为空！",
                    numberThree: "此项必须为数字(非负数，可保留一位小数)！"
                },
                likeMoreTime: {
                    required: "预估剩余工时不能为空！",
                    numberThree: "此项必须为数字(非负数，可保留一位小数)！"
                },
                reallyUseTime: {
                    numberThree: "此项必须为数字(非负数，可保留一位小数)！"
                }
            }
        };  
        editSubTaskValidator = new Validator(config);
    }

    var saveEditTaskValidation = function(data) {
        if(editSubTaskValidator.form()) {
            saveEditTask();
        } else {
            console.log('验证失败');
        }
    }

    var saveEditTask = function(e) {
        handLoading = new Loading(loadingConfig);
        if(true) {
            var config = null,
                dialog = null;

            var tagData = {};
                tagData.tags = editSubTaskTagSelect.getCheckSelectTag();
                tagData.createPerson = $cookie.get("userId");
                // tagData.createPerson = 1;
                tagData.createModule = 'task';

            Util.ajax.postJson(AjaxPath.project + "/tag", JSON.stringify(tagData), function(tagResult, isok) {
                if(tagResult.returnCode==="0000"){
                    var tagList = [];
                    $(tagResult.beans).each(function(index, item){
                        tagList.push(item.id ? item.id : item.key );
                    })
                    var data = Form.serialize($('.detailEditSubTaskForm', $el));
                        data.parentId = editSubTaskData.parentId;
                        data.systemId = editSubTaskData.systemId;
                        data.updater = $cookie.get("userId");
                        // data.updater = 1;
                        data.linkIdAndTypes = editSubTaskLinkSelect.getCheckSelectTag("key");
                        data.tagIdList = tagList;
                        data.attachmentIdList = reqAttachmentIdList;

                    Util.ajax.postJson(AjaxPath.demand + '/requires/'+ editSubTaskData.parentId +'/task/' + editSubTaskData.id , JSON.stringify(data), function(taskResult, isok) {
                        if(taskResult.returnCode==="0000") {
                            var editTagData = {};
                                editTagData.tags = tagResult.beans;
                                editTagData.createModuleId = taskResult.beans.id;

                            Util.ajax.postJson(AjaxPath.project + "/tag/bathUpdate", JSON.stringify(editTagData), function(result, isok) {
                                handLoading.destroy();
                                if(result.returnCode==="0000"){
                                    config = {
                                        mode: 'confirm', // 对话框模式，默认normal标准|confirm浮动层|confirm确认对话框
                                        title:'提示',
                                        width: 300, //对话框宽度，可选项。normal默认值为600，confirm默认值为300，tips默认值为240
                                        height: 120, //对话框高度，可选项。normal默认值为400，confirm默认值为180，tips默认值为80
                                        cancelDisplay: false, //是否显示取消按钮（强制执行，可在confirm模式下生效），可选项。 默认true(显示)
                                        modal:true,
                                        content: '<div style="text-align:center;margin-top:50px">修改子工作项成功</div>' ,// 对话框内容，可以是字符串、html片段、或dom对象,默认为loading状态（点组成的圈）
                                    };
                                    dialog = new Dialog(config);
                                    dialog.on('onclose',function(){
                                        back();
                                    });
                                }else{
                                    config = {
                                        mode: 'confirm', // 对话框模式，默认normal标准|confirm浮动层|confirm确认对话框
                                        title:'提示',
                                        width: 300, //对话框宽度，可选项。normal默认值为600，confirm默认值为300，tips默认值为240
                                        height: 120, //对话框高度，可选项。normal默认值为400，confirm默认值为180，tips默认值为80
                                        cancelDisplay: false, //是否显示取消按钮（强制执行，可在confirm模式下生效），可选项。 默认true(显示)
                                        modal:true,
                                        content: '<div style="text-align:center;margin-top:50px">'+result.returnMessage+'</div>' ,// 对话框内容，可以是字符串、html片段、或dom对象,默认为loading状态（点组成的圈）
                                    };
                                    dialog = new Dialog(config);
                                }
                            },'application/json')

                        } else {
                            handLoading.destroy();
                            config = {
                                mode: 'confirm', // 对话框模式，默认normal标准|confirm浮动层|confirm确认对话框
                                title:'提示',
                                width: 300, //对话框宽度，可选项。normal默认值为600，confirm默认值为300，tips默认值为240
                                height: 120, //对话框高度，可选项。normal默认值为400，confirm默认值为180，tips默认值为80
                                cancelDisplay: false, //是否显示取消按钮（强制执行，可在confirm模式下生效），可选项。 默认true(显示)
                                modal:true,
                                content: '<div style="text-align:center;margin-top:50px">'+taskResult.returnMessage+'</div>' ,// 对话框内容，可以是字符串、html片段、或dom对象,默认为loading状态（点组成的圈）
                            };
                            dialog = new Dialog(config);
                        }
                    },'application/json');
                }else {
                    handLoading.destroy();
                    config = {
                        mode: 'confirm', // 对话框模式，默认normal标准|confirm浮动层|confirm确认对话框
                        title:'提示',
                        width: 300, //对话框宽度，可选项。normal默认值为600，confirm默认值为300，tips默认值为240
                        height: 120, //对话框高度，可选项。normal默认值为400，confirm默认值为180，tips默认值为80
                        cancelDisplay: false, //是否显示取消按钮（强制执行，可在confirm模式下生效），可选项。 默认true(显示)
                        modal:true,
                        content: '<div style="text-align:center;margin-top:50px">'+tagResult.returnMessage+'</div>' ,// 对话框内容，可以是字符串、html片段、或dom对象,默认为loading状态（点组成的圈）
                    };
                    dialog = new Dialog(config);
                }
            },'application/json');            
        }
    }

    var getEditTaskData = function(){
        Util.ajax.getJson(AjaxPath.demand + '/requires/'+ editSubTaskData.id +'?type=2', {}, function(result, isok){
            if(result.returnCode==="0000"){
                editSubTaskData = result.beans;
                editSubTaskData["menuId"] = editSubTaskDatatplId;
                console.log(editSubTaskData);
                editSubTaskAssSelectId = editSubTaskData.tryPeople;

                var positionStr = "";
                    positionStr = positionStr + editSubTaskData.systemName + ' / ';
                $(editSubTaskData.position).each(function(index, item){
                    positionStr += item.requireTitle + ' / ';
                })
                positionStr = positionStr.substring(0,positionStr.length-2);
                $(".editSubTaskPosition", $el).html(positionStr);

                getEditTaskNextStatus(editSubTaskData.status);
                inSelect();
                initDate();
                fileUp();
                fileTable();//修改时用
                initList();
                editSubTaskValidation();
                formInit();
            }else {
                config = {
                    mode: 'confirm', // 对话框模式，默认normal标准|confirm浮动层|confirm确认对话框
                    title:'提示',
                    width: 300, //对话框宽度，可选项。normal默认值为600，confirm默认值为300，tips默认值为240
                    height: 120, //对话框高度，可选项。normal默认值为400，confirm默认值为180，tips默认值为80
                    cancelDisplay: false, //是否显示取消按钮（强制执行，可在confirm模式下生效），可选项。 默认true(显示)
                    modal:true,
                    content: '<div style="text-align:center;margin-top:50px">'+result.returnMessage+'</div>' ,// 对话框内容，可以是字符串、html片段、或dom对象,默认为loading状态（点组成的圈）
                };
                dialog = new Dialog(config);
            }
        });
    }

    var createLoading = function(){
        loadingConfig = {
            el:'body',                  //组件要绑定的容器，默认为body（此项可不配置或留空）
            className:'loading',           //组件外围的className
            position:'center',      //提示信息位置，顶部top|默认center中央
            width:'300',      //loading的宽度,非必须，默认300
            height:'auto',      //loading的宽度,非必须，默认auto
            mask:1,                 //是否显示遮罩， 0不显示|默认1显示
            animate:1,              //是否显示动画效果， 0不显示|默认1显示
            mode:'layer',     //展示方式 loadingLine线条方式|默认layer弹层方式
            text:'加载中...',       //提示文字，默认 加载中...
            icon:'dotCycle',  //文字前面的gif动画， 默认dotCycle有点组成的圈|cmcc移动图标|cmccLarge大的移动图标
        }
    };

    return initialize;

});

